package com.example.lt.entity.json;

import lombok.Data;
import lombok.ToString;
import org.springframework.util.ObjectUtils;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * @Author 小涛Tao
 * @Date: 2024/07/31/17:54
 * version 1.0 注释：
 **/
@Data
@ToString
public class BodyJson implements Serializable {

    String id; // 这次视频审核请求任务的唯一标识符

    String status; // 这个审核任务的状态，有没有完成

    ResultJson result; // 结果JSON结果中的 "result"

    // 比较 value 是否在 min 和 max 之间
    public boolean compare(Double min, Double max, Double value) {
        return value >= min && value <= max;
    }

    // 检查结果中所有 detail 中的 score 是否在 min 和 max 中，只要里面有一个这样的情况，就算中了
    public boolean checkViolation(List<CutsJson> types, Double min, Double max) {
        for (CutsJson cutsJson : types) {
            if (!ObjectUtils.isEmpty(cutsJson.details)) {
                for (DetailsJson detail : cutsJson.details) {
                    if (compare(min, max, detail.score)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    // 获取图片或视频审核结果中的 Terror 审核类型下的信息，视频直接就是 Cuts ，图片为 details 和 suggestion
    public List<CutsJson> getTerror() {
        final TypeJson terror = result.getResultChile().getScenes().getTerror();

        // 如果这是视频审核结果，那么结果中的 Terror 审核类型下就有 Cuts ，直接返回这个 Cuts
        if (!ObjectUtils.isEmpty(terror.getCuts())) {
            return terror.getCuts();
        }

        // 否则证明这是图片的审核结果，因为图片审核结果中的 Terror 审核类型下没有 Cuts
        // 那么就创建一个 CutsJson 来封装图片 Terror 审核类型下的 details 和 suggestion
        final CutsJson cutsJson = new CutsJson();
        cutsJson.setDetails(terror.getDetails());
        cutsJson.setSuggestion(terror.getSuggestion());
        return Collections.singletonList(cutsJson); // 设置为只有一个元素的集合来返回
    }


    // 获取图片或视频审核结果中的 Politician 审核类型下的信息
    public List<CutsJson> getPolitician(){
        final TypeJson politician = result.getResultChile().getScenes().getPolitician();
        if (!ObjectUtils.isEmpty(politician.getCuts())){
            return politician.getCuts();
        }

        // 我：如果是图片的审核结果，politician(TypeJson) 下没有 cuts(CutsJson)，所以直接设置 details 和 suggestion
        final CutsJson cutsJson = new CutsJson();
        cutsJson.setDetails(politician.getDetails());
        cutsJson.setSuggestion(politician.getSuggestion());

        return Collections.singletonList(cutsJson);
    }


    // 获取图片或视频审核结果中的 Pulp 审核类型下的信息
    public List<CutsJson> getPulp(){
        final TypeJson pulp = result.getResultChile().getScenes().getPulp();
        if (!ObjectUtils.isEmpty(pulp.getCuts())){
            return pulp.cuts;
        }

        final CutsJson cutsJson = new CutsJson();
        cutsJson.setDetails(pulp.getDetails());
        cutsJson.setSuggestion(pulp.getSuggestion());

        return Collections.singletonList(cutsJson);
    }

}
